package br.edu.unoesc.minibi.inicializa;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;

import br.edu.unoesc.minibi.model.AreaPlantada;
import br.edu.unoesc.minibi.model.Cultura;
import br.edu.unoesc.minibi.model.ItemVenda;
import br.edu.unoesc.minibi.model.Produto;
import br.edu.unoesc.minibi.service.AreaPlantadaServiceInterface;
import br.edu.unoesc.minibi.service.CulturaServiceInterface;
import br.edu.unoesc.minibi.service.ItemVendaServiceInterface;
import br.edu.unoesc.minibi.service.ProdutoServiceInterface;

@ApplicationScoped
@ManagedBean(name = "inicializaMB")
public class Inicializa {

	@ManagedProperty(value = "#{produtoService}")
	private ProdutoServiceInterface produtoService;

	@ManagedProperty(value = "#{areaPlantadaService}")
	private AreaPlantadaServiceInterface areaPlantadaService;

	@ManagedProperty(value = "#{culturaService}")
	private CulturaServiceInterface culturaService;

	@ManagedProperty(value = "#{itemVendaService}")
	private ItemVendaServiceInterface itemVendaService;

	// ============ atributos normais
	// private StreamedContent imagemGrafico;

	// =-========== métodos

	public ProdutoServiceInterface getProdutoService() {
		return produtoService;
	}

	public void setProdutoService(ProdutoServiceInterface produtoService) {
		this.produtoService = produtoService;
	}

	public AreaPlantadaServiceInterface getAreaPlantadaService() {
		return areaPlantadaService;
	}

	public void setAreaPlantadaService(AreaPlantadaServiceInterface areaPlantadaService) {
		this.areaPlantadaService = areaPlantadaService;
	}

	public CulturaServiceInterface getCulturaService() {
		return culturaService;
	}

	public void setCulturaService(CulturaServiceInterface culturaService) {
		this.culturaService = culturaService;
	}

	public ItemVendaServiceInterface getItemVendaService() {
		return itemVendaService;
	}

	public void setItemVendaService(ItemVendaServiceInterface itemVendaService) {
		this.itemVendaService = itemVendaService;
	}

	public void iniciaDados() {
		Cultura milho = new Cultura("Milho", 9, 3);
		Cultura soja = new Cultura("Soja", 10, 3);

		culturaService.salvar(soja);
		culturaService.salvar(milho);
		// 25f, 29f, 32f, 37f, 35f
		AreaPlantada area2007Milho = new AreaPlantada(2007, milho, 250l);
		AreaPlantada area2008Milho = new AreaPlantada(2008, milho, 290l);
		AreaPlantada area2009Milho = new AreaPlantada(2009, milho, 320l);
		AreaPlantada area2010Milho = new AreaPlantada(2010, milho, 370l);
		AreaPlantada area2011Milho = new AreaPlantada(2011, milho, 350l);

		areaPlantadaService.salvar(area2007Milho);
		areaPlantadaService.salvar(area2008Milho);
		areaPlantadaService.salvar(area2009Milho);
		areaPlantadaService.salvar(area2010Milho);
		areaPlantadaService.salvar(area2011Milho);

		// Float[] f4 = { 71f, 65f, 52f, 49f };
		AreaPlantada area2008Soja = new AreaPlantada(2008, soja, 710l);
		AreaPlantada area2009Soja = new AreaPlantada(2009, soja, 650l);
		AreaPlantada area2010Soja = new AreaPlantada(2010, soja, 520l);
		AreaPlantada area2011Soja = new AreaPlantada(2011, soja, 490l);

		areaPlantadaService.salvar(area2008Soja);
		areaPlantadaService.salvar(area2009Soja);
		areaPlantadaService.salvar(area2010Soja);
		areaPlantadaService.salvar(area2011Soja);

		iniciaProdutosMilho(milho);
		iniciaProdutosSoja(soja);
	}

	private Date getData(String data) {
		SimpleDateFormat spf = new SimpleDateFormat("dd/MM/yyyy");
		try {
			return spf.parse(data);
		} catch (ParseException e) {
			return null;
		}
	}

	private void iniciaProdutosSoja(Cultura cultura) {
		Produto produto = new Produto("Aproach Prima");
		produto.addCultura(cultura, 3, 6);

		produtoService.salvar(produto);

		List<ItemVenda> itensVenda = new ArrayList<ItemVenda>();

		itensVenda.add(new ItemVenda(getData("2/07/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("4/07/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("5/07/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("10/07/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("15/07/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("20/07/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("26/07/2011"), 4f, 12f, produto));

		itensVenda.add(new ItemVenda(getData("11/08/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("12/08/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("14/08/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("15/08/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("18/08/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("25/08/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("25/08/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("26/08/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("27/08/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("28/08/2011"), 6f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("28/08/2011"), 4f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("28/08/2011"), 3f, 12f, produto));

		itensVenda.add(new ItemVenda(getData("1/09/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("2/09/2011"), 6f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("3/09/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("4/09/2011"), 4f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("5/09/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("6/09/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("8/09/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("8/09/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("8/09/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("9/09/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("10/09/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("11/09/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("12/09/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("14/09/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("15/09/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("18/09/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("20/09/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("22/09/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("23/09/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("25/09/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("26/09/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("27/09/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("29/09/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("29/09/2011"), 3f, 12f, produto));

		itensVenda.add(new ItemVenda(getData("2/10/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("2/10/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("3/10/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("4/10/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("4/10/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("5/10/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("6/10/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("7/10/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("8/10/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("8/10/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("9/10/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("10/10/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("11/10/2011"), 1f, 12f, produto));

		for (ItemVenda item : itensVenda) {
			itemVendaService.salvar(item);
		}
	}

	private void iniciaProdutosMilho(Cultura cultura) {
		Produto produto = new Produto("Roundup Transorb");
		produto.addCultura(cultura, 3, 6);

		produtoService.salvar(produto);

		List<ItemVenda> itensVenda = new ArrayList<ItemVenda>();
		itensVenda.add(new ItemVenda(getData("25/03/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("25/03/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("26/03/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("27/03/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("28/03/2011"), 6f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("28/03/2011"), 4f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("28/03/2011"), 3f, 12f, produto));

		itensVenda.add(new ItemVenda(getData("2/04/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("4/04/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("5/04/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("10/04/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("15/04/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("20/04/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("26/04/2011"), 4f, 12f, produto));

		itensVenda.add(new ItemVenda(getData("1/05/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("2/05/2011"), 6f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("3/05/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("4/05/2011"), 4f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("5/05/2011"), 5f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("6/05/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("8/05/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("8/05/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("8/05/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("9/05/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("10/05/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("11/05/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("12/05/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("13/05/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("14/05/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("15/05/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("18/05/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("20/05/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("21/05/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("22/05/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("23/05/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("25/05/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("26/05/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("27/05/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("29/05/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("29/05/2011"), 3f, 12f, produto));

		itensVenda.add(new ItemVenda(getData("2/06/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("2/06/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("3/06/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("4/06/2011"), 3f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("4/06/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("5/06/2011"), 2f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("6/06/2011"), 1f, 12f, produto));
		itensVenda.add(new ItemVenda(getData("7/06/2011"), 2f, 12f, produto));

		for (ItemVenda item : itensVenda) {
			itemVendaService.salvar(item);
		}
	}

	public List<Produto> getProdutos() {
		return produtoService.getAll();
	}

	public List<Cultura> getCulturas() {
		return culturaService.getAll();
	}
	//
	// public StreamedContent getImagemGrafico() {
	// DefaultCategoryDataset dataset = new DefaultCategoryDataset();
	// List<AreaPlantadaVO> lista =
	// areaPlantadaService.getAreaPlantadaGrafico();
	//
	// for (AreaPlantadaVO vo : lista) {
	// dataset.addValue(vo.getQtdPlantada(), vo.getNomeCultura(), vo.getAno());
	// }
	//
	// try {
	// JFreeChart chart =
	// ChartFactory.createLineChart("Área plantada por cultura por ano", "Ano",
	// "Hectares", dataset,
	// PlotOrientation.VERTICAL, true, true, false);
	// File chartFile = new File("dynamichart");
	// ChartUtilities.saveChartAsPNG(chartFile, chart, 900, 400);
	// imagemGrafico = new DefaultStreamedContent(new
	// FileInputStream(chartFile), "image/png");
	// } catch (Exception e) {
	// e.printStackTrace();
	// }
	// return imagemGrafico;
	// }
}